home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / progs / editor / frexxed / fpl / window.fpl < prev    next >
Text File  |  1996-07-22  |  5KB  |  212 lines

  1.  
  2. export int WindowNew(int window)
  3. {
  4.   int id=New();
  5.   int newid = WindowAlloc(id);
  6.   if(window) {
  7.     int code=ReadInfo("window", newid);
  8.     if(0 == code) {
  9.       /* We did this is on a screen, make the new one a window */
  10.       SetInfo(newid, "window", 1);
  11.     }
  12.     /* on this screen */
  13.     SetInfo(newid, "public_screen", ReadInfo("current_screen", GetWindowID()));
  14.   }
  15.   else {
  16.     /* Make this a new screen! */
  17.     SetInfo(newid, "window", 0);
  18.   }
  19.   WindowOpen(newid);
  20.   CurrentBuffer(id);
  21. }
  22.  
  23.  
  24. /*
  25.  Split window either horizontal (1) or vertical (0)
  26. */
  27. export void SplitWindow(int type)
  28. {
  29.   int curr_win=GetWindowID();
  30.   int new_win;
  31.  
  32.   if (ReadInfo("window")==0) {  // If screen then deny the operation
  33.     Request("You can't split a screen!", "Failure", "OK");
  34.     return;
  35.   }
  36.  
  37.   new_win=WindowAlloc(DuplicateEntry(), curr_win);
  38.   if (new_win) {
  39.     if (type==0) {
  40.       SetInfo(new_win, "window_xpos", ReadInfo("real_window_xpos", curr_win)+ReadInfo("real_window_width", curr_win)/2);
  41.       SetInfo(new_win, "window_width", ReadInfo("real_window_width", curr_win)/2);
  42.       SetInfo(curr_win, "window_width", ReadInfo("real_window_width", curr_win)/2);
  43.     } else {
  44.       SetInfo(new_win, "window_ypos", ReadInfo("real_window_ypos", curr_win)+ReadInfo("real_window_height", curr_win)/2);
  45.       SetInfo(new_win, "window_height", ReadInfo("real_window_height", curr_win)/2);
  46.       SetInfo(curr_win, "window_height", ReadInfo("real_window_height", curr_win)/2);
  47.     }
  48.     WindowOpen(new_win);
  49.   }
  50. }
  51.  
  52.  
  53. /*
  54.   Enlarge a window to use maximum screen space
  55. */
  56. export void WindowMaximum(int win)
  57. {
  58.   SetInfo(win, "window_xpos", 0,
  59.                "window_ypos", 0,
  60.                "window_width", ReadInfo("real_screen_width", win),
  61.                "window_height", ReadInfo("real_screen_height", win));
  62. }
  63.  
  64. /*
  65.   Minimize a window
  66. */
  67. export void WindowMinimize(int win)
  68. {
  69.   SetInfo(win, "window_width", 0, "window_height", 0);
  70. }
  71.  
  72. /*
  73.   Resize a window to normal/default screen size
  74. */
  75.  
  76. export void WindowNormal(int win)
  77. {
  78.   SetInfo(win, "window_xpos", ReadInfo("window_xpos", 0),
  79.                "window_ypos", ReadInfo("window_ypos", 0),
  80.                "window_width", ReadInfo("window_width", 0),
  81.                "window_height", ReadInfo("window_height", 0));
  82. }
  83.  
  84. /*
  85.   Rearrange all windows to be placed as tiles.
  86. */
  87. export void WindowsTile()
  88. {
  89.   int x_number=1, y_number=1;
  90.   int count;
  91.   int width, height;
  92.   int winid;
  93.   int windows=ReadInfo("windows_open");
  94.   int x_count, y_count;
  95.  
  96.   if (ReadInfo("window")==0) {  // If screen then deny the operation
  97.     Request("You can't tile a screen!", "Failure", "OK");
  98.     return;
  99.   }
  100.  
  101.   for (count=1; count<10; count++) {
  102.     y_number=windows;
  103.     x_number=y_number/count;
  104.     y_number=windows-x_number*count+1;
  105.     x_number++;
  106.     if (x_number<=y_number)
  107.       break;
  108.   }
  109.   width=ReadInfo("real_screen_width")/x_number;
  110.   height=ReadInfo("real_screen_height")/y_number;
  111.   winid=PrevWindow(0);
  112.   for (x_count=0; x_count<x_number && windows; x_count++) {
  113.     for (y_count=0; y_count<y_number && windows; y_count++) {
  114.       SetInfo(winid, "window_xpos", x_count*width,
  115.                      "window_ypos", y_count*height,
  116.                      "window_width", width,
  117.                      "window_height", height);
  118.       WindowToFront(1, winid);
  119.       do {
  120.         winid=PrevWindow(winid);
  121.       } while (ReadInfo("iconify", winid));
  122.       windows--;
  123.     }
  124.   }
  125. }
  126.  
  127. /*
  128.   Makes the windows cascaded (0) or stacked (1)
  129. */
  130. export void WindowsCascade(int stack)
  131. {
  132.   int count;
  133.   int width, height;
  134.   int winid;
  135.   int windows=ReadInfo("windows_open");
  136.   int x_count, y_count;
  137.   int dimension=10;
  138.  
  139.   if (ReadInfo("window")==0) {  // If screen then deny the operation
  140.     Request("You can't cascade a screen!", "Failure", "OK");
  141.     return;
  142.   }
  143.  
  144.   width=ReadInfo("real_screen_width");
  145.   if (!stack)
  146.     width/=2;
  147.   height=ReadInfo("real_screen_height")/2;
  148.   winid=PrevWindow(0);
  149.   count=0;
  150.   while (windows) {
  151.     if (!ReadInfo("iconify", winid)) {
  152.       if (!count) {
  153.         y_count=0;
  154.         x_count=0;
  155.       } else {
  156.         if (!stack)
  157.           x_count++;
  158.         y_count++;
  159.       }
  160.       count++;
  161.       if (count==dimension)
  162.         count=0;
  163.       SetInfo(winid, "window_xpos", x_count*width/dimension,
  164.                      "window_ypos", y_count*height/dimension,
  165.                      "window_width", width,
  166.                      "window_height", height);
  167.       WindowToFront(1, winid);
  168.       windows--;
  169.     }
  170.     winid=PrevWindow(winid);
  171.   }
  172. }
  173.  
  174.  
  175. /*
  176.   Hook to make a window to be freed when the close gadget is hit.
  177. */
  178. export int hook_CloseGadget()
  179. {
  180.   if (ReadInfo("windows_allocated")==1) {
  181.     if (ReadInfo("query_closegadget") && Request("Do you want to quit FrexxEd?"))
  182.       QuitAll();
  183.   } else {
  184.     WindowFree();
  185.  
  186.     /* If buffer is nonamed and empty, then kill it */
  187.     if (!strcmp(ReadInfo("file_name"), "") && ReadInfo("size")==0)
  188.       Kill();
  189.   }
  190. }
  191. Hook("CloseGadget", "hook_CloseGadget();");
  192. ConstructInfo("query_closegadget", "", "", "BG(System)", "", 0, 1, 1);
  193.  
  194.  
  195. /*
  196.   WindowAlloc syntax:
  197.  
  198. WindowID = WindowAlloc(EntryID, DefaultWindow);
  199.  
  200. EntryID = Entry to be placed in the new window.
  201.           '0' or illigal ID gives a new buffer.
  202.  
  203. DefaultWindow = WindowID to copy layout from.  '0' for default.
  204.  
  205.  return:
  206.  
  207. WindowID.  ID for the new window.
  208.  
  209.  
  210. */
  211.  
  212.